package main

import (
	"fmt"
	"sync"
)

// channel

var a []int
var b chan int	// 需要指定通道中元素的类型
var wg sync.WaitGroup


func noBufChannel(){
	fmt.Println(b)		// nil
	b = make(chan int)	// 不带缓冲区的通道的初始化
	wg.Add(1)		// 加个计数器
	go func(){
		defer wg.Done()	//计数器-1
		x := <- b
		fmt.Println("后台goroutine从通道b中取到了", x)
	}()
	b <- 10				// hang住了
	fmt.Println("10发送到通道b中了")
	fmt.Println(b)
	wg.Wait()			// 等待
}

func bufChannel(){
	fmt.Println(b)		// nil
	b = make(chan int, 10)	// 带缓冲区的通道的初始化
	b <- 10				// hang住了
	fmt.Println("10发送到通道b中了")
	b <- 20
	fmt.Println("20发送到通道b中了")
	close(b)

}

func main(){
	bufChannel()
}


